package edu.yonsei.iwb.smarttv.result;

/**
 * 개체식별 결과를 저장하기 위한 클래스로써, 입력된 질의와 식별된 개체 정보를 담고 있는 클래스
 *
 * @author 이명진
 * @version 1.0, 2011.9.8
 */
public class NERResults {

    /**
     * NER 결과에 대한 사용자 질의
     */
    private String query;
    /**
     * NER에 대한 결과
     */
    private NamedEntityLinkedHashMap neh;

    /**
     * 개체 식별 결과를 생성하기 위한 기본 생성자
     */
    public NERResults() {
        this.query = new String();
        this.neh = new NamedEntityLinkedHashMap();
    }

    /**
     * 사용자의 질의와 개체 식별 결과 클래스인 NamedEntityHashtable을 이용하여 개체 식별 결과를 생성하기 위한 생성자
     *
     * @param q 개체 식별 결과에 대한 사용자의 질의
     * @param n 개체 식별 결과
     */
    public NERResults(String q, NamedEntityLinkedHashMap n) {
        this.query = q;
        this.neh = n;
    }

    /**
     * 개체 식별 결과에 대한 사용자의 질의를 얻기 위한 메소드
     *
     * @return 사용자의 질의문
     */
    public String getQuery() {
        return this.query;
    }

    /**
     * 개체 식별의 결과로써 질의 문자열과 결과의 쌍으로 담고 있는 클래스를 반환하는 메소드
     *
     * @return 개체 식별 결과를 담고 있는 NamedEntityHashtable 객체를 반환
     */
    public NamedEntityLinkedHashMap getNamedEntityResults() {
        return this.neh;
    }

    /**
     * 개체 식별 결과에 대한 개수를 반환하는 메소드
     *
     * @return 개체 식별 결과의 개수를 반환
     */
    public int sizeOfNamedEntityResults() {
        return this.neh.size();
    }

    /**
     * 개체 식별에 사용된 질의어를 집합의 형태로 반환. 즉, 사용자 질의를 개체 식별 단위로 구분한 집합
     *
     * @return 개체 식별을 위해 사용된 문자열에 대해 Object 배열 형태로 반환
     */
    public Object[] getNamedEntityStrings() {
        return this.neh.keySet().toArray();
    }

    /**
     * 개체 식별 결과에 대해 주어진 문자열로 식별된 개체들을 반환하는 메소드
     *
     * @param k 식별된 개체에 대한 문자열
     * @return 매개변수를 이용하여 식별된 개체들을 반환
     */
    public NamedEntitySet getNamedEntitySetByString(String k) {
        return this.neh.get(k);
    }

    /**
     * 개체 식별 결과에 대해 주어진 문자열로 식별된 개체들의 개수를 반환하는 메소드
     *
     * @param k 식별된 개체에 대한 문자열
     * @return 매개변수를 이용하여 식별된 개체들의 개수를 반환
     */
    public int sizeOfNamedEntitySetByString(String k) {
        return this.neh.get(k).size();
    }

    /**
     * 개체 식별 결과에 대해 주어진 문자열로 식별된 개체들 중 인덱스에 해당하는 개체를 반환하는 메소드
     *
     * @param k 식별된 개체에 대한 문자열
     * @param i 식별된 개체들에 대한 인덱스
     * @return 매개변수를 이용하여 식별된 개체들 중 인덱스에 해당하는 개체를 반환
     */
    public NamedEntity getNamedEntityByStringIndex(String k, int i) {
        return this.neh.get(k).get(i);
    }

    @Override
    public String toString() {
        StringBuffer sb = new StringBuffer();
        sb.append(this.neh.toString());
        return sb.toString();
    }

}
